home *** CD-ROM | disk | FTP | other *** search
/ Shareware Grab Bag / Shareware Grab Bag.iso / 007 / cutils.arc / EDINPUT.C < prev    next >
Encoding:
C/C++ Source or Header  |  1985-08-30  |  3.3 KB  |  92 lines

  1. /*
  2.                 AUTHOR          Jon Wesener
  3.                 DATE            7 / 18 / 85
  4.                 PURPOSE         This routine will give interactive input
  5.                                 from the screen with editing functions.
  6. */
  7.  
  8. /*
  9.         KEYGETS will get a string of max size length from the keyboard.
  10.                 The passed in string should be buffered out maximally.
  11.  
  12.         keygets(string, length, row, col, page, upper);
  13.  
  14.         RETURN:         nothing
  15. */
  16.  
  17. #define         ESC     27
  18. #define         BKSP    8
  19. #define         CR      13
  20. #define         NORM    15
  21. #define         RESET   7
  22. #define         INV     112
  23. #include        "key.h"
  24.  
  25. keygets(str,len,row,col,page,upper)
  26. char    *str;
  27. int     len, row, col, page, upper;
  28. {
  29.         int     bol, eol, cnt, ins=0, tmp;
  30.         char    *ptr, ch, *cpy;
  31.  
  32.         bol=col;
  33.         eol=col+len-2;
  34.         ptr=str;
  35.         atputs(ptr,page,row,col,NORM);
  36.         atputc(*ptr,page,row,col,INV);
  37.         while ( (ch=getcw()) != CR)
  38.         {
  39.                 atputc(*ptr,page,row,col,NORM);
  40.                 switch(ch){
  41.                 case    LFTCH : if (col > bol)
  42.                                         {ptr--;col--;}
  43.                                 break;
  44.  
  45.                 case    RGTCH : if (col < eol)
  46.                                         {ptr++;col++;}
  47.                                 break;
  48.  
  49.                 case    DEL   : strcpy(ptr,ptr+1);
  50.                                 str[len-2]=' ';
  51.                                 atputs(ptr,page,row,col,NORM);
  52.                                 break;
  53.  
  54.                 case    BKSP  : if (col > bol)
  55.                                 {       ptr--; col--;
  56.                                         strcpy(ptr,ptr+1);
  57.                                         str[len-2]=' ';
  58.                                         atputs(ptr,page,row,col,NORM);
  59.                                 }
  60.                                 break;
  61.                 case    BOL   : ptr=str;
  62.                                 col=bol;
  63.                                 break;
  64.  
  65.                 case    EOL   : ptr=str+len-2;
  66.                                 col=eol;
  67.                                 break;
  68.  
  69.                 case    INS   : ins= !ins;
  70.                                 break;
  71.  
  72.                 default       : if ( (ch >= ' ') && (ch <= '~') )
  73.                                 {
  74.                                 if ( (upper) && (ch >= 'a') && (ch <= 'z') )
  75.                                         ch=ch-'a'+'A';
  76.                                 if (ins)
  77.                                   {for(tmp=eol,cpy=str+len-2;tmp>col;tmp--)
  78.                                         *(cpy--)=*cpy;
  79.                                   atputs(ptr,page,row,col,NORM);
  80.                                   }
  81.                                 *ptr=ch;
  82.                                 atputc(ch,page,row,col,NORM);
  83.                                 if (col < eol)
  84.                                         {ptr++;col++;}
  85.                                 }
  86.                                 break;
  87.                 }
  88.                 atputc(*ptr,page,row,col,INV);
  89.         }
  90.         atputs(str,page,row,bol,RESET);
  91. }
  92.